package cc.lucien;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

public class Demo06 {
    public static void main(String[] args) throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
        // 获取Student类的Class对象
        Class clazz = Student.class;

        // 通过反射创建对象
        /**
         * 创建对象
         *  1.Class对象.newInstance()
         *      调用的是类的无参构造方法，所以类必须有无参构造方法且必须是用
         *      ’public‘ 修饰的，从 JDK9 开始，此方法被废弃掉了（不推荐使用）
         *      推荐使用第二种方式
         *  2. 获取类的构造方法，通过构造方法实例化
         */
        Student stu = (Student) clazz.newInstance();
        System.out.println(stu);

        Constructor<Student> constr = clazz.getDeclaredConstructor(String.class, int.class);
        Student s = constr.newInstance("张三", 23);
        System.out.println(s);
    }
}
